<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /**
         * 原型
         * 1. 每一个函数都有一个天生自带的属性prototype,他是函数的显示原型对象
         * 2. 每一个prototype显示原型对象，都有一个天生自带的属性 constructor,值是当前函数
         * 3. 每一个实例化出来的对象，都有一个天生自带的属性__proto__，指向所属类的原型对象
         * 
         * 原型链：
         * 当使用一个对象的属性或方法时，如果自身私有属性没有，沿着__proto__向上查找，如果还没有，继续沿着__proto__向上查找，直到找到Object.prototye为止，称为原型链
         */

        function Person(name, age){
            // 私有属性和方法
            this.name = name;
            this.age = age;
            this.say = function(){}
        }
        var p1 = new Person('赵敏',20);// p1 有自己的name age say
        var p2 = new Person('张无忌',21);// p2 也有自己的name age say
        console.log(p1.say === p2.say);// false;

        // 定义所有实例对象都可以访问的公有属性和方法，需要定义在该对象的构造函数的原型对象上
        Person.prototype.eat = function(){// 公有的方法，p1,p2等所有实例对象共用
            console.log('eat')
        }
        Person.prototype.className = '230222'; // 公有属性 p1,p2等所有Person实例对象都可以共用


    </script>
</body>
</html>